package com.saclub.app.activity;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import butterknife.Bind;
import butterknife.OnClick;

import com.offroader.core.OffRoaderActivity;
import com.offroader.utils.PhoneUtils;
import com.saclub.app.R;
import com.saclub.app.adapter.GuideAdapter;
import com.saclub.app.common.MyApp;
import com.saclub.app.common.PerferencesHelper;

/**
 * 引导
 *
 */
public class GuideActivity extends OffRoaderActivity implements OnPageChangeListener {
	public static final String GUIDE_V_CODE_KEY = "guide_v_code_key";
	// 引导图片资源 
	private static final int[] pics = { R.drawable.bg_guide_1, R.drawable.bg_guide_2, R.drawable.bg_guide_3, R.drawable.bg_guide_4 };

	// 定义ViewPager对象  
	@Bind(R.id.id_guide_view_paper)
	protected ViewPager viewPager;

	@Bind(R.id.id_guide_point_layout)
	protected ViewGroup pointLayout;

	// 底部小点的图片  
	@Bind({ R.id.id_guide_point_1, R.id.id_guide_point_2, R.id.id_guide_point_3, R.id.id_guide_point_4 })
	protected ImageView[] points;

	@Bind(R.id.id_guide_entry)
	protected View entryBtn;

	// 记录当前选中位置  
	private int currentIndex;

	// 定义ViewPager适配器  
	private GuideAdapter vpAdapter;

	// 定义一个ArrayList来存放View  
	private List<View> views;

	@Override
	public int getContentView() {
		return R.layout.act_guide;
	}

	/** 
	 * 初始化组件 
	 */
	@Override
	public void initView() {

		// 实例化ArrayList对象  
		views = new ArrayList<View>();

		// 实例化ViewPager适配器  
		vpAdapter = new GuideAdapter(views);

	}

	@Override
	public void onBackPressed() {
		//屏蔽后退
	}

	/** 
	 * 初始化数据 
	 */
	@Override
	public void initData() {
		// 定义一个布局并设置参数  
		LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
				LinearLayout.LayoutParams.MATCH_PARENT);

		// 初始化引导图片列表  
		for (int i = 0; i < pics.length; i++) {
			ImageView iv = new ImageView(this);
			iv.setLayoutParams(mParams);
			iv.setImageResource(pics[i]);
			iv.setScaleType(ScaleType.FIT_XY);
			views.add(iv);

		}

		// 设置数据  
		//前面的views中没有数据 在前面的循环中才插入数据 而此时vpAdapter中已经有数据说明   
		//初始化adapter的时候 参数传递是传引用  
		viewPager.setAdapter(vpAdapter);
		// 设置监听  
		viewPager.setOnPageChangeListener(this);

		// 初始化底部小点  
		initPoint();
	}

	/** 
	 * 初始化底部小点 
	 */
	private void initPoint() {

		// 循环取得小点图片  
		for (int i = 0; i < pics.length; i++) {
			// 默认都设为灰色  
			points[i].setEnabled(true);
			// 设置位置tag，方便取出与当前位置对应  
			points[i].setTag(i);
		}

		// 设置当面默认的位置  
		currentIndex = 0;
		// 设置为白色，即选中状态  
		points[currentIndex].setEnabled(false);
	}

	/** 
	 * 当滑动状态改变时调用 
	 */
	@Override
	public void onPageScrollStateChanged(int arg0) {

	}

	/** 
	 * 当当前页面被滑动时调用 
	 */

	@Override
	public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

	}

	/** 
	 * 当新的页面被选中时调用 
	 */

	@Override
	public void onPageSelected(int position) {

		//控制入口显示
		if (points.length == position + 1)
			entryBtn.setVisibility(View.VISIBLE);
		else
			entryBtn.setVisibility(View.GONE);

		// 设置底部小点选中状态  
		setCurDot(position);

	}

	/**
	 * 点击小点
	 * @param v
	 */
	@OnClick({ R.id.id_guide_point_1, R.id.id_guide_point_2, R.id.id_guide_point_3 })
	public void pointClick(View v) {
		int position = (Integer) v.getTag();
		setCurView(position);
		setCurDot(position);
	}

	@OnClick(R.id.id_guide_entry)
	public void entryApp() {
		HomeActivity.go(this);

		//设置引导版本号（下次不再显示引导）
		PerferencesHelper.getInstance().saveInt(GuideActivity.GUIDE_V_CODE_KEY, PhoneUtils.getAppVersionCode(MyApp.getInstance()));
	}

	/** 
	 * 设置当前页面的位置 
	 */
	private void setCurView(int position) {
		// 排除异常情况  
		if (position < 0 || position >= pics.length) {
			return;
		}
		viewPager.setCurrentItem(position);
	}

	/** 
	 * 设置当前的小点的位置 
	 */
	private void setCurDot(int positon) {
		// 排除异常情况  
		if (positon < 0 || positon > pics.length - 1 || currentIndex == positon) {
			return;
		}
		points[positon].setEnabled(false);
		points[currentIndex].setEnabled(true);

		currentIndex = positon;
	}

	public static void go(Activity act) {
		Intent intent = new Intent(act, GuideActivity.class);
		act.startActivity(intent);
	}
}
